/**
 * @file slm_cmd_json.h
 * @brief SLM(美格) 4g json command
 */

#ifndef _ML307_JSON_CMD_H
#define _ML307_JSON_CMD_H
#include <stdbool.h>
#include "stdint.h"
#include "cJSON.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
 * @brief 解析 JSON 字符串，提取 cmd 和 type
 * @param userarg 用户参数
 * @param injsonstr 输入的 JSON 字符串
 * @param outjsonstr 输出缓冲区，存储提取的 cmd 字符串
 * @param buffer_size @note 使用静态的cJSON_PrintPreallocated输出字符串将你开辟的内存空间大小传入
 * 动态申请可以不用管，这项填入NULL就可以
 * @return 0 成功，-1 失败
*/
void ml370_json_cmd_switch(void*userarg,char *cmd_buffer_t, char *response_t, size_t len);
// 解析 JSON 字符串，提取 cmd 和 type
typedef bool (*JsonCallback_Handler)(void *UserArg,char *injsonstr, char *outjsonstr,size_t buffer_size);
// 指令定义结构体
typedef struct
{
        const char *name;
        const char *fn_type;//指令类型  get/set
        JsonCallback_Handler json_callback;
}jsonCommandEntry;



#define EXT_JSON_CMD(name,json_type, json_cb_fn)  {name,json_type, json_cb_fn}
//兼容json基础版本
void ml_count_handler(const char* cmd, const char* method, cJSON* arg, void* user_arg, char* out_str, uint16_t out_len);
void ml_mqtt_cfg_handler(const char* cmd, const char* method, cJSON* arg, void* user_arg, char* out_str, uint16_t out_len);
void ml_4g_status_handler(const char* cmd, const char* method, cJSON* arg, void* user_arg, char* out_str, uint16_t out_len);
void ml_reg_handler(const char* cmd, const char* method, cJSON* arg, void* user_arg, char* out_str, uint16_t out_len);
void ml_mqtt_sta_handler(const char* cmd, const char* method, cJSON* arg, void* user_arg, char* out_str, uint16_t out_len);
#ifdef __cplusplus
}
#endif

#endif  

/*_ML307_JSON_CMD_H*/ 
